// /pages/usage-form/usage-form.js

// 导入所需模块和工具函数
const app = getApp();
import { validatePhone } from '../../utils/validators.js';
import { formatDuration } from '../../utils/time.js'; // 【优化】从工具库导入时长格式化函数

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 从上个页面接收的核心信息
    usageRecordId: null,
    deviceName: '',
    startTime: null,
    
    // 用于UI显示和控制的数据
    durationText: '00:00:00', // 格式化的已使用时长
    durationTimer: null,     // 用于更新时长的定时器ID
    
    // 与WXML表单双向绑定的数据对象
    formData: {
      actualUserName: '',
      actualUserPhone: '',
      actualUserGroup: '',
      remarks: '',
    },
    
    // 用于控制各输入框是否锁定的状态对象
    isLocked: {
      actualUserName: false,
      actualUserPhone: false,
      actualUserGroup: false,
    },

    // 页面状态控制
    isSubmitting: false,
  },

  // ==========================================================
  // =                      生命周期函数                       =
  // ==========================================================
  
  onLoad(options) {
    this.setData({
      usageRecordId: options.usageRecordId,
      deviceName: options.deviceName,
      // 【优化】更健壮的时间格式转换
      startTime: new Date(options.startTime.replace('T', ' ').replace(/-/g, '/'))
    });
    
    // 启动表单预填和时长动态更新
    this.initializeForm();
    this.startDurationTimer();
  },

  onUnload() {
    // 页面卸载时，必须清除定时器，防止在后台继续运行导致内存泄漏
    if (this.data.durationTimer) {
      clearInterval(this.data.durationTimer);
    }
  },

  // ==========================================================
  // =                   核心业务与事件处理                    =
  // ==========================================================
  
  /**
   * [核心改动] - 表单初始化函数
   * 从全局数据中读取用户信息，预填到表单中，并根据情况锁定输入框
   */
  initializeForm() {
    const userInfo = app.globalData.userInfo;
    if (!userInfo) return;

    // 一次性准备所有需要更新的数据
    const updateData = {
      formData: { ...this.data.formData },
      isLocked: { ...this.data.isLocked }
    };

    if (userInfo.real_name) {
      updateData.formData.actualUserName = userInfo.real_name;
      updateData.isLocked.actualUserName = true;
    }
    if (userInfo.phone) {
      updateData.formData.actualUserPhone = userInfo.phone;
      updateData.isLocked.actualUserPhone = true;
    }
    if (userInfo.group_name) {
      updateData.formData.actualUserGroup = userInfo.group_name;
      updateData.isLocked.actualUserGroup = true;
    }
    
    this.setData(updateData);
  },

  /**
   * [事件处理] - 用户在输入框中输入时触发（实现双向绑定）
   */
  onInputChange(e) {
    const field = e.currentTarget.dataset.field;
    const value = e.detail.value;
    this.setData({
      [`formData.${field}`]: value
    });
  },

  /**
   * [事件处理] - 用户点击被锁定的输入框时的引导提示
   */
  onLockedInputTap(e) {
    const field = e.currentTarget.dataset.field;
    if (this.data.isLocked[field]) {
      wx.showToast({
        title: '如需修改，请前往“个人中心”修改个人信息',
        icon: 'none',
        duration: 2000
      });
    }
  },

  /**
   * [核心流程] - 用户点击“确认并结束使用”按钮
   */
  async onSubmit() {
    if (this.data.isSubmitting) return;

    const formData = this.data.formData;
    if (!this.validateForm(formData)) return;
    
    this.setData({ isSubmitting: true });
    wx.showLoading({ title: '正在提交...' });
    
    // 准备提交到后端的数据
    const requestData = {
      actual_user_name: formData.actualUserName,
      actual_user_phone: formData.actualUserPhone,
      actual_user_group: formData.actualUserGroup || '无',
      remarks: formData.remarks || '',
    };
    
    try {
      // 使用全局 request 函数发起网络请求
      await app.request({
        url: `/api/app/orders/usage/${this.data.usageRecordId}/end`,
        method: 'PATCH',
        data: requestData,
      });

      wx.showToast({ title: '操作成功', icon: 'success', duration: 1500 });
      
      // 成功后，返回“我的订单”页面并确保其刷新
      await new Promise(resolve => setTimeout(resolve, 1500));
      wx.navigateBack({ delta: 1 });

    } catch (err) {
      console.error("提交结束使用表单失败", err);
    } finally {
      this.setData({ isSubmitting: false });
      wx.hideLoading();
    }
  },

  // ==========================================================
  // =                        辅助函数                        =
  // ==========================================================
  
  /**
   * 启动一个每秒更新一次的定时器，用于动态显示已使用时长
   */
  startDurationTimer() {
    // 先立即执行一次，避免页面打开时显示"计算中..."
    this.updateDuration(); 
    const timer = setInterval(() => {
      this.updateDuration();
    }, 1000);
    this.setData({ durationTimer: timer });
  },

  /**
   * 调用工具函数计算并更新页面上显示的时长
   */
  updateDuration() {
    // 直接调用从 time.js 导入的工具函数
    const durationText = formatDuration(this.data.startTime);
    this.setData({ durationText });
  },
  
  /**
   * 表单校验逻辑
   */
  validateForm(formData) {
    if (!formData.actualUserName || !formData.actualUserName.trim()) {
      wx.showToast({ title: '请输入实际使用人姓名', icon: 'none' });
      return false;
    }
    if (!validatePhone(formData.actualUserPhone)) {
      wx.showToast({ title: '请输入正确的手机号', icon: 'none' });
      return false;
    }
    return true;
  }
});